<?php

namespace app\index\controller\user;

use app\index\logic\users\UsersLogic;
use app\common\service\Util;
use app\common\model\users\Distributor;
use think\facade\Request;


class User
{

    /**
     * 微信第三方登录
     */
    public function wechatLogin()
    {
        $usersLogic = new UsersLogic();
        $code = Request::param('code');
        if (!$usersLogic->wechatLogin($code)) {
            return Util::ajaxReturn(0, '登录失败');
        }

        // 获取用户信息
        $userInfo = UsersLogic::getUserInfo();

        // 生成唯一用户token
        $token = $usersLogic->generateToken($userInfo['id']);

        return Util::ajaxReturn(1, '登录成功', $token);
    }

    /**
     * 登录或注册一体化
     * @return void
     */
    public function loginOrRegister()
    {
        $param = Request::param();
        $mobile = $param['mobile'] ?? '';
        $smsCode = $param['smsCode'] ?? '';

        if (empty($mobile) || empty($smsCode)) {
            return Util::ajaxReturn(0, '手机号和验证码不能为空');
        }

        $usersLogic = new UsersLogic();
        $userInfo = $usersLogic->loginOrRegister($mobile, $smsCode);

        if ($userInfo) {
            // 生成唯一用户token
            $token = $usersLogic->generateToken($userInfo['id']);
            return Util::ajaxReturn(1, '登录成功', $token);
        } else {
            return Util::ajaxReturn(0, '验证码错误或手机号格式不正确');
        }
    }

    /**
     * 发送短信验证码
     * @return void
     */
    public function sendSmsCode()
    {
        $param = Request::param();
        $mobile = $param['mobile'] ?? '';

        if (empty($mobile)) {
            return Util::ajaxReturn(0, '手机号不能为空');
        }

        $usersLogic = new UsersLogic();
        $result = $usersLogic->sendSmsCode($mobile);

        if ($result['status']) {
            return Util::ajaxReturn(1, $result['message']);
        } else {
            return Util::ajaxReturn(0, $result['message']);
        }
    }


    /**
     * 我的信息
     * @return void
     */
    public function profile()
    {
        // 接收token，根据token获取对应用户信息
        $token = Request::header('token');
        $userInfo = UsersLogic::getUserInfoByToken($token);
        if (empty($userInfo)) {
            return Util::ajaxReturn(0, '用户不存在');
        }

        return Util::ajaxReturn(1, 'success', $userInfo);
    }

    /**
     * 分销商信息
     * @return void
     */
    public function distributorProfile()
    {
        // 接收token，根据token获取对应分销商用户信息
        $token = Request::header('token');
        $userInfo = UsersLogic::getUserInfoByToken($token);
        if (empty($userInfo)) {
            return Util::ajaxReturn(0, '用户不存在');
        }
        $distributorModel = new Distributor();
        $rs = $distributorModel->where('user_id', $userInfo['id'])->select()->toArray();
        if (empty($rs)) {
            return Util::ajaxReturn(0, '分销商不存在');
        }
        if ($rs) {
            foreach ($rs as $key => $item) {
                $rs[$key]['create_time'] = date('Y-m-d H:i:s', $item['create_time']);
            }
        }

        return Util::ajaxReturn(1, 'success', $rs);
    }

    /**
     * 我的订单
     * @return void
     */
    public function myOrders()
    {
        // 接收token，根据token获取对应用户信息
        $token = Request::header('token');
        $user = UsersLogic::getUserInfoByToken($token);
        if (empty($user)) {
            return Util::ajaxReturn(0, '用户不存在');
        }
        // 查询用户订单
        $orderModel = new \app\common\model\order\Order();
        $rs = $orderModel->where('user_id', $user['id'])->select()->toArray();
        if ($rs) {
            foreach ($rs as $key => $item) {
                $rs[$key]['create_time'] = date('Y-m-d H:i:s', $item['create_time']);
            }
        }

        return Util::ajaxReturn(1, 'success', $rs);
    }

    /**
     * 用户编辑个人信息
     * @return void
     */
    public function updateProfile()
    {
        // 接收token，根据token获取对应用户信息
        $token = Request::header('token');
        $userInfo = UsersLogic::getUserInfoByToken($token);
        if (empty($userInfo)) {
            return Util::ajaxReturn(0, '用户不存在');
        }

        $param = Request::param();
        $param['update_time'] = time();
        // 更新用户信息并返回更新后的用户信息
        $usersLogic = new UsersLogic();
        $result = $usersLogic->updateProfile($userInfo['id'], $param);
        if (!$result['status']) {
            return Util::ajaxReturn(0, $result['message']);
        }

        return Util::ajaxReturn(1, '更新成功', $result);
    }
}
